package com.zp.generic;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class GenericTest3<T> {
	private T foo;

	public T getFoo() {
		return foo;
	}

	public void setFoo(T foo) {
		this.foo = foo;
	}
	
	public static void main(String[] args) {
		//在类声明中定义好了该类行可以使任何类型：<T>相当于<T extends Object>,所以可以把<T>类型的直接看做Object类型；
		//在声明引用类型的时候用通配符"?"来表示该引用可以指向任何List<String>子类型；
		GenericTest3<? extends List<String>> g1 = null; //局部变量定义必须初始化；
		
		//这样g就可以指向两种类型了；
		g1 = new GenericTest3<ArrayList<String>>();
		g1 = new GenericTest3<LinkedList<String>>();
		
		//super是指在List<String>类型上面的类型；
		GenericTest3<? super List<String>> g2 = new GenericTest3<Object>();
		
//		GenericTest3<? extends Object> g3 = new GenericTest3<String>();
//		g3.setFoo("hello");
	}
}
